package hotel.switchs.oversea.online.service;

import hotel.base.oversea.service.BaseService;
import hotel.base.oversea.utils.Result;
import hotel.base.oversea.vo.meituan.request.room.CompareRoomForFpVO;
import hotel.switchs.oversea.api.VO.CompareHotelRoomVo;
import hotel.switchs.oversea.api.VO.request.GetRoomListVo;
import hotel.switchs.oversea.api.VO.request.SetHotelOnlineVo;
import hotel.switchs.oversea.api.VO.request.SetHotelUpVo;
import hotel.switchs.oversea.api.entity.SwitchFixPointSetEntity;
import hotel.switchs.oversea.api.entity.SwitchHotelActiveGenreEntity;
import hotel.switchs.oversea.api.entity.SwitchHotelUpEntity;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * @Auther: 你的名字
 * @Date: 2020/09/23/14:23
 * @Description:
 */
@Service
public interface SwitchHotelUpService extends BaseService<SwitchHotelUpEntity> {

    /***
     * @Author: lmf
     * @Date: 2020/9/23
     * 批量控制上架和下线
     */
    Result<Object> upHotelAllNew(SetHotelUpVo setHotelUpVo);
    /***
     * @Author: lmf
     * @Date: 2020/9/23
     * 修改售卖房型上架和下架
     */
    Result<Object> modifyHotelStatus(SetHotelUpVo setHotelUpVo);
    /***
     * @Author: lmf
     * @Date: 2020/9/23
     * 获取上架的酒店列表
     * @param getRoomListVo
     */
    Result<Object> getHotelList(GetRoomListVo getRoomListVo);
    /***
     * @Author: lmf
     * @Date: 2020/9/23
     * 上传execel
     */
    Result<Object> upExecel(MultipartFile excelFile);


    Result<Object> getUpHotelAsc();

    /**
     * 批量控制下线
     * @param setHotelUpVo
     * @return
     */
    Result<Object> downHotelAll(SetHotelUpVo setHotelUpVo);

    Result<Object> getUpHotelDesc();
    /**
     *
     * @author: lmf
     * @time: 2020/10/15 16:04
     * 酒店轮询
     */
    Result<Object> runHotel();
    /**
     *
     * @author: lmf
     * @time: 2020/10/27 16:38
     * 导入酒店数据,开启酒店售卖
     */
    Result<Object> submitUploadSale(MultipartFile excelFile, Integer status);

    Result<Object> getUpHotelGoodsData();

    Result<Object> getUpHotelGoodsDataByHotelId(Integer mtHotelId);
    /**
     * <H1>获取上架的酒店列表</H1>
     *
     * @return hotel.common.utils.Result<java.lang.Object>
     * @author HuangT
     * @Date 2020/11/12 17:14
     */
    Result<List<CompareRoomForFpVO>> getUpHotelGoodsDataFp();

    Result<Object> getUpHotelGoodsDataForBasicRoom();
    /**
     * 添加所有缓存
     * @return
     */
    Result<Object> addAllCache(Integer genre);

    /**
     * @author: lmf
     * @date: 2020/8/14 13:45
     * 设置酒店下线状态
     */
    Result<Object> downHotel(SetHotelOnlineVo setHotelOnlineVo);
    /***
     * @Author: lmf
     * @Date: 2020/12/8
     * 批量更新售卖房型房态价格
     */
    Result<Object> batchUpdateRoomPriceAndStatus();
    /***
     * @Author: lmf
     * @Date: 2020/12/24
     * 获取上架酒店列表供美团主动查询价格房态使用
     * @param genre
     */
    Result<Object> getUpHotelRpOrFtAsc(Integer genre);
    /***
     * @Author: lmf
     * @Date: 2020/12/25
     * 检查上架的酒店的房型是否有产品可以创建
     */
    Result<Object> checkSaleHotelRoomId();
    /***
     * @Author: lmf
     * @Date: 2020/12/31
     * 获取上架酒店无订单的列表
     */
    Result<Object> bookTimeCloseNoOrderHotelList();
    /***
     * @Author: lmf
     * @Date: 2020/12/31
     *
     */
    Result<Object> bookTimeStartNoOrderHotelList();
    /***
     * @Author: lmf
     * @Date: 2021/1/7
     * 替换一个礼拜没有订单的酒店
     */
    Result<Object> replaceNoOrderHotel();
    /***
     * @Author: lmf
     * @Date: 2021/1/7
     * 重新上架新的酒店
     */
    Result<Object> againNewHotel();
    /***
     * @Author: lmf
     * @Date: 2021/1/7
     * 增量上酒店
     */
    Result<Object> addHotelList();
    /***
     * @Author: lmf
     * @Date: 2021/1/8
     * 活动酒店上下线
     */
    Result<Object> activeHotelDownAndUp();
    /***
     * @Author: lmf
     * @Date: 2021/1/15
     * 获取在售的酒店进行房型数据更新
     */
    Result<Object> saleHotelUpdateRoomInfo();
    /***
     * @Author: lmf
     * @Date: 2021/1/26
     * 导入黑名单
     */
    Result<Object> sumbitUploadBlack(MultipartFile excelFile);
    /***
     * @Author: lmf
     * @Date: 2021/1/27
     * 效验房型的价格房态是否更新，没有重新推送
     */
    Result<Object> checkSaleHotelPriceAndStatusIsChange();
    /***
     * @Author: lmf
     * @Date: 2021/2/2
     * 有订单的酒店的产品的取消规则
     */
    XSSFWorkbook getOrderHotelCancelRule();
    /***
     * @Author: lmf
     * @Date: 2021/2/23
     * 设置定点售卖功能
     */
    Result<Object> setHotelSaleTime(SwitchFixPointSetEntity switchFixPointSetEntity);
    /***
     * @Author: lmf
     * @Date: 2021/2/23
     * 获取定点售卖功能信息
     */
    Result<Object> getHotelSaleTime();
    /***
     * @Author: lmf
     * @Date: 2021/2/23
     * 推送售卖酒店进行定时售卖
     */
    Result<Object> pushFixPoint();
    /***
     * @Author: lmf
     * @Date: 2021/2/26
     * 酒店进行公式分类
     * @param genre
     */
    Result<Object> allotHotelAndFormula(Integer genre);
    /***
     * @Author: lmf
     * @Date: 2021/3/8
     * 清除酒店缓存的价格公式数据
     */
    Result<Object> removeHotelPriceSetCache();
    /***
     * @Author: lmf
     * @Date: 2021/3/23
     * 设置酒店是否更新价格和房态的酒店列表
     */
    Result<Object> setCheckSaleHotelPriceAndStatusIsChangeHotelList();
    /***
     * @Author: lmf
     * @Date: 2021/3/24
     */
    Result<Object> createTable();
    /****
     * @Author: lmf
     * @Date: 2021/4/7
     * 获取参加活动的酒店列表
     */
    Result<Object> getJoinActiveHotelList();
    /***
     * @Author: lmf
     * @Date: 2021/4/9
     * 初始化酒店到缓存
     */
    Result<Object> initSaleHotelRoomToCache();
    /***
     * @Author: lmf
     * @Date: 2021/4/9
     * 初始化酒店房型窗户到缓存
     */
    Result<Object> initSaleHotelRoomWindowToCache();

    /***
     * @Author: lmf
     * @Date: 2021/4/23
     * 更新价格房态
     */
    Result<Object> refreshPushRoomStatusAndPrice();
    /***
     * @Author: lmf
     * @Date: 2021/4/27
     */
    XSSFWorkbook exportHotel(Integer num);

    /**
     * 初始化酒店数据供美团异步使用
     * @return
     */
    Result<Object> initHotelData();
    /**
     * 获取酒店状态
     * @return
     */
    Result<Object> getHolelStatus();
    /**
     * @Author: lmf
     * @Date: 2021/5/26
     * 针对有公式的酒店进行公式降级，如果到达最低等级不进行调价
     * 每个月，月初进行调整
     */
    Result<Object> hotelFormualLadderDown();
    /**
     * 记录直采满房美团有房的数据
     */
    Result<Object> recordRoomStatusLog();
    /**
     * 携程房根据效应价格房态，如果产品对应没有价格房态缓存，默认认为失效
     */
    Result<Object> dealRoomFailure();

    Result<Object> adjustHotelFormulaByOutputIsZero(MultipartFile excelFile);
    /**
     * 匹配携程-美团上架的酒店房型相关信息：价格、房态、早餐信息
     */
    Result<Object> compareHotelRoomInfoByApi(CompareHotelRoomVo compareHotelRoomVo);

    /**
     * 开启促销活动
     * @param excelFile
     * @param genreId
     * @return
     */
    Result<Object> openActive(MultipartFile excelFile, Integer genreId);
    /**
     * 新增活动类型
     * @param switchHotelActiveGenreEntity
     * @return
     */
    Result<Object> addActive(SwitchHotelActiveGenreEntity switchHotelActiveGenreEntity);
    /**
     * 获取活动数据类型列表
     */
    Result<Object> getActiveList();

    /**
     * 针对优势酒店-》
     * @return
     */
    Result<Object> switchVipToNormalCloseStatus();
    /***
     * @Author: lmf
     * @Date: 2021/7/1
     * 导出有订单的酒店数据
     */
    XSSFWorkbook exportOrderHotel();
    /**
     * 获取天天特价的酒店数据
     * @param num
     * @return
     */
    XSSFWorkbook exportActiveHotel(Integer num);
    /**
     * 获取售卖房型的取消规则
     * @return
     */
    Result<Object> getSaleHotelRoomCanceleRule();

    /**
     * 导入天天特价酒店数据入表和缓存
     * @param excelFile
     */
    void openActiveHotel(MultipartFile excelFile);

    /**
     * 夜间控制数据列表
     */
    Result<Object> limitNightList();
    /**
     * 夜间控制控制
     */
    Result<Object> setLimitNight(Map<String, String> map);

    /**
     * 普通酒店 日期下降
     */
    Result<Object> adjsutCommonHotelSaleDays();
}
